perm filename JOYM[F8,ALS] blob
sn#307783 filedate 1977-10-01 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 *****************
C00016 ENDMK
C⊗;
*****************
*DECLARATIONS****
*****************
VX EQU H'0'
VY EQU H'2'
X EQU H'0'
Y EQU HU
*****************
CON DCI COL0 DCO TO COLOR UP FLAG
CLR CLEAR ACC
XM OR IN W/STATUS
BM CON1 BLACK AT TOP
LR A,Y NO. GET Y COORD
COM
INC
AI H'7'
LR Y,A Y←7-Y
LR A,X GET X COORD
COM
INC
AI H'7' X←7-X
CON1 DCI JSAV DCO TO ENCODED JOYSTICK
LR A,Y
SR 1
ST BYTE#←(1/2)*Y
LIS H'1'
NS X
LIS H'8'
BZ CON2 X ODD?
SL 4 YES.
CON2 LR Y,A SAVE RESULT IN Y
LR A,X GET X COORDINATE
SR 1
LR X,A CUT X IN HALF
LR A,Y AND RECOVER BYTE
BZ CON4 DONE?
CON3 SR 1 NO, SHIFT BIT OVER
DS X DECREMENT COUNT
BNZ CON3 DONE YET?
CON4 ST YES,STORE RESULT
POP AND RETURN
****************************************
*CURS***JOYSTICK READ AND MOVE DURING***
********READ****************************
*USES K,DCO,DC1,HU,REGS 0,1,2.**********
****************************************
CURS LR K,P SAVE RETURN ADDRESS
PI PUSH PUSH IT ON TO STACK
PI DAI DISABLE INTERRUPT DRIVEN UDATE
MAP2 PI WAUD WAIT, THEN UPDATE
LIS H'8'
MAP3 DCI H'8FB' DCO TO CURRENT Y LO
CM
BNZ MAP3 TO START OF DISPLAY
LIS H'1' YES. CAN START JOYREAD
LR HU,A SET FOR HORIZONTAL POT
PI JOYI GET JOYSTICK INPUT
LR VX,A SAVE IN VX
LIS H'0'
LR HU,A SET FOR VERTICAL POT
LR 0,A SAVE IN REGISTER 0
PI AMAP CONVERT VERTICAL READING
LR VY,A SET IN VY
LR A,VX
LR 0,A
PI AMAP CONVERT HORIZONTAL READING
LR VX,A AND SAVE SAME
DCI JPSV DCO TO SAVE OF LAST POSIT(0-7 COORD)
LM
LR X,A
LM
LR Y,A SET X & Y FROM OLD READING
LIS H'8'
LR 3,A SET COUNTER
MAP4 LR A,X GET X COORD
AS VX ADD VX TO GET "NEW" POSITION
BP MAP5 OFF LHS?
LIS H'0' YES, RESET
BR MAP6
MAP5 CI H'7'
BC MAP6 OFF RHS?
LIS H'7' YES, RESET
MAP6 LR X,A SET NEW X COORD
LR A,Y GET Y COORD
AS VY ADD VY FOR "NEW" POSITION
BP MAP7 OFF THE TOP?
LIS H'0' YES, RESET TO TOP
BR MAP8
MAP7 CI H'7'
BC MAP8 OFF THE BOTTOM?
LIS H'7' YES, RESET
MAP8 LR Y,A SET NEW Y VALUE
AS X ADD X COORD
NI H'1'
BNZ MAP9 LEGAL SQAURE?
DS 3 NO, DECREMNT COUNTER
BNZ MAP4 TRIED TWICE?
BR MP12 YES, LEAVE CURSOR ALONE
MAP9 PI MVC DELETE OLD POSITION
DCI JPSV
LR A,X
ST
LR A,Y
ST RESET POSITION
PI MVC AND DISPLAY IT
MP12 LI H'1E'
LR 3,A SET TIMER COUNT
MP10 CLR CLEAR ACC
OUTS 1 CLEAR TO PORT 1
NOP NOPS FOR FCC
NOP REASONS.
NOP DO NOT REMOVE!!!
INS 1
NI H'1'
BNZ MP11 BUTTON PRESSED?
PI WAUD NO, WAT THEN UPDATE
DS 3 DECREMENT COUNTER
BNZ MP10 WAITED LONG ENOUGH?
BR MAP2 YES, CHECK JOYSTICK AGAIN
MP11 PI CONV BUTTON PRESSED SO, CONVERT
DCI JSAV DCO TO JOYSTICK CONVERTED VALS
LM
LR 4,A BYTE NUMBER IN R4
LM
LR 3,A BYTE IN R3
DCI JPSV DCO TO 0-7 FORM OF COORDS
LM GET X COORD
LR 1,A STORE IN R1
LM GET Y COORD
LR 2,A STORE IN R2
DCI COL0 DCO TO COLOR
CLR CLEAR ACC
XM IN, W/STATUS
BM MP13 BLACK IS PLAYER?
LR A,2 YES
COM
INC
AI H'7' Y←7-Y
LR 2,A
BR MP14
MP13 LR A,1 PLAYER RED
COM
INC
AI H'7'
LR 1,A X←7-X
MP14 PI WAUD WAIT, THEN UPDATE
PI ENIN ENABLE INTERRUPTS
PI POPS POP RETURN ADDRESS
PK AND RETURN
*******************************************
*MVC****SET CURSOR ON DISPLAY, OR REMOVE***
*******************************************
*USES REGISTERS 1, Q, DCO******************
*******************************************
MVC LR K,P SAVE RETURN ADDRESS
DCI JPSV DCO TO COORDINATE (0-7 FORM)
LM
LR 1,A SAVE IN R1
LM
SL 1 ACC←2*Y
DCI TABL
ADC ADD OFFSET TO ADDR TABLE
LM
LR QU,A
LM
LR QL,A SET BASE ADDRESS IN Q
LR DC,Q AND INTO DCO
LR A,1 GET X COORD
ADC ADD OFFSET FOR SAME
LIS H'4'
LR 1,A SET COUNTER
DCI POIN DCO TO CURSOR OBJ
MVC1 LM
XDC
LR Q,DC
XM
LR DC,Q
ST
LIS H'7' NEXT DESTINATION
ADC IN DCO
XDC AND SAVED IN DC1
DS 1 DONE ALL?
BNZ MVC1
PK YES, RETURN
*******************************************
*AMAP***JOYSTICK MAPPING ROUTINE***********
*******************************************
*USES ACC, R0, AND W***********************
*******************************************
AMAP LR A,0 GET VALUE TO BE CONVERTED
CI H'40'
BNC AMP1 VAL LE H'40'?
LI H'FF' YES, SET VELOCITY TO -1
BR AMP2
AMP1 CI H'87'
LIS H'1'
BNC AMP2 VALUE GT H'87'?
CLR NO, SO VELOCITY IS 0
AMP2 POP
*******************************************
*WMC****WRITE MESSAGE, CHECKERS************
*******************************************
*MESSAGE NUMBER IN REGISTER 0**************
*******************************************
*USES R0, SP O'24', AND THOSE REGISTERS *
*USED BY THE UPDATE ROUTINE *
*******************************************
WMC LR K,P SAVE RETURN ADDRESS
PI PUSH PUSH ONTO STACK
PI DAI DISABLE INTERRUPTS
PI WAUD WAIT, THEN UPDATE
DCI WMCA DCO TO MESSAGE ADDRESS START
LR A,0 GET MESSAGE NUMBER
SL 1
AS 0
ADC ADD 3XNUMBER TO DCO
LISU 2
LISL 4 SET ISAR TO O'24'
LM
LR S,A SET MESSAGE LENGTH
LM
LR QU,A
LM
LR QL,A MESSAGE ADDRESS INTO Q
DCI LINE
LI H'50'
ST SET PROPER LINE NUMBER
DCI H'05EF' DCO TO MESSAGE BUILD AREA
LI H'70'
LR 0,A SET COUNTER
CLR CLEAR ACC
WMC1 ST
DS 0
BNZ WMC1 CLEAR TEXT AREA
PI WAUD WAIT, THEN DO UPDATE
DCI H'872'
LIS H'2'
ST TURN OBJECT ON
LR DC,Q SET ADDRESS INTO DCO
PI WMS WRITE MESSAGE
PI WAUD WAIT, THEN UPDATE
PI ENIN ENABLE INTERRUPTS ONCE MORE
PI POPS POP RETURN ADDRESS
PK AND RETURN
*******************
*DATA FOR WMC******
*******************
WMCA DC H'A' YOUR MOVE!
DC YMRV:
DC YMRV.
DC H'A' MUST JUMP
DC MJM:
DC MJM.
DC H'D' ILLEGAL MOVE
DC MIM:
DC MIM.
DC H'8' TOO FAR
DC TFM:
DC TFM.
DC H'10' WRONG DIRECTION
DC WDM:
DC WDM.
DC H'10' PIECE CANNOT MOVE
DC PCMM:
DC PCMM.
YRMV DC H'0513' YO
DC H'0309' UR
DC H'0' SPACE
DC H'2913' MO
DC H'2F0B' VE
DC H'04' !
MJM DC H'290B' MU
DC H'2107' ST
DC H'0' SPACE
DC H'1703' JU
DC H'2925' MP
DC H'04' !
MIM DC H'0127' IL
DC H'270B' LE
DC H'1B11' GA
DC H'2700' L SPACE
DC H'2913' MO
DC H'2F0B' VE
DC H'04' !
TFM DC H'0713' TO
DC H'1300' O SPACE
DC H'1D11' FA
DC H'0904' R!
WDM DC H'0D09' WR
DC H'132B' ON
DC H'1B00' G SPACE
DC H'1F01' DI
DC H'090B' RE
DC H'3107' CT
DC H'0113' IO
DC H'2B04' N!
PCMM DC H'2501' PI
DC H'3111' EC
DC H'0B00' E SPACE
DC H'3111' CA
DC H'2B39' N'
DC H'0700' T SPACE
DC H'2913' MO
DC H'2F0B' VE
**********************************************
*DBUG***DEBUGGING AID ROUTINE. NOT TO REMAIN*
********IN CHECKERS PROGRAM AFTER DEBUGGING *
********COMPLETED*****************************
*DESTROYS THE CONTENTS OF Q REGISTERS*********
**********************************************
DBUG LR K,P SAVE RETURN ADDRESS
LR Q,DC SAVE DCO IN Q REGISTER
DCI H'1FB9' DCO TO START OF SAVE AREA
LR QU,A
ST
LR QL,A
ST SAVE OLD DCO
XDC
LR Q,DC
XDC
LR A,QU
ST
LR A,QL
ST SAVE OLD DC1
LR A,9 GET J REGISTER
ST AND SAVE IT
LR J,W
LR A,9
ST AND SAVE STATUS
LR A,IS
ST NOW SAVE THE ISAR
LI H'40'
LR 9,A SET COUNTER
CLR
LR IS,A AND SET ISAR
DBG1 LR A,S
ST
LR A,IS
INC
LR IS,A
DS 9
BNZ DBG1 SAVED ALL OF SCRATCHPAD?
PI PUSH YES, PUSH RETURN ADDRESS
PI DAI AND DISABLE INTERRUPTS
PI WAUD WAIT, THEN UPDATE
DCI H'820'
LI H'63'
ST DELTAX OBJ2←3
DCI H'FFC'
LI DBDT:
ST
LI DBDT.
ST
LI DBDT:
ST
LI DBDT.
ST RESET UPDATE DATA POINTERS
DCI H'872'
LIS H'2'
ST TURN OBJECT ON...
DBG2 PI WAUD WAIT, THEN UPDATE
CLR
OUTS 1 CLEAR PORT 1
NOP NOPS FOR FCC
NOP RELATED REASONS.
NOP DO NOT DELETE!!!
INS 1
NI H'1'
BZ DBG2 BUTTON PRESSED
DCI H'872' YES, TURN
LI H'82' OBJECT 2 OFF
ST
DCI H'820'
LI H'6F'
ST RESET OBJ 2 DELTA X
DCI H'FFC'
LI UDIT:
ST
LI UDIT.
ST
LI UDIT:
ST
LI UDIT.
ST RESET UPDATE POINTERS
PI WAUD DO ONE MORE UPDATE
PI ENIN RE-ENABLE INTERRUPTS
PI POPS POP RETURN ADDRESS
PK AND RETURN
************************
*DATA FOR DEBUG ROUTINE*
************************
DBDT DC H'30' ROM LO
DC H'10'
DC DBGO.
DC H'8C' ROM HO + COLOR
DC H'8F'
DC DBGO:+H'E0'
DC H'3C' DELTA Y
DC H'14'
DC H'05'
************************
*DEBUG OBJECT FOR TEST *
************************
DBGO DC H'F772'
DC H'5E54'
DC H'4A50'
DC H'5672'
DC H'5654'
DC H'4A52'
DC H'F77B'
DC H'DE'